home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Assembly / CopyBlit / CopyBlit.c
Encoding:
Text File  |  1994-04-22  |  7.3 KB  |  232 lines  |  [TEXT/R*ch]

  1. void CopyBlit( PixMapHandle *pixMap, Rect *rect1, Rect *rect2 )
  2. {
  3.     Point where = {0, 0};
  4.     register Byte *objectPtr, *screenPtr;
  5.     register Byte *objectRow, *screenRow;
  6.     register short longs, bytes, offset;
  7.     short screenRowSize, objectRowSize, numRows;
  8.     
  9.     LocalToGlobal( &where );
  10.     screenRowSize = screenBits.rowBytes * 8;
  11.     screenPtr = screenRow = (Byte *)
  12.         screenBits.baseAddr + (screenRowSize * (long)( rect2->top + where.v ) ) 
  13.                             + (rect2->left + where.h);
  14.     
  15.     objectRowSize = (***pixMap).rowBytes & 0x3FFF;
  16.     objectPtr = objectRow = (Byte *)
  17.         GetPixBaseAddr(*pixMap) + (objectRowSize * (long)rect1->top) + rect1->left;
  18.     
  19.     offset = (long)screenPtr & 3 ;
  20.     rect1->left += offset;
  21.     offset *= 2;
  22.     
  23.     longs = 2 * ( (rect1->right - rect1->left) / 4 );
  24.     bytes = 2 * ( (rect1->right - rect1->left) & 3 ); 
  25.  
  26.     numRows = rect1->bottom - rect1->top;
  27.     
  28.     do
  29.     {
  30.         asm
  31.         {
  32.             lea        @offsetOver, a0
  33.             sub.w    offset, a0
  34.             jmp        (a0)
  35.             
  36.             move.b    (objectPtr)+, (screenPtr)+
  37.             move.b    (objectPtr)+, (screenPtr)+
  38.             move.b    (objectPtr)+, (screenPtr)+
  39. @offsetOver:
  40.         }
  41.         
  42.         asm
  43.         {
  44.             lea        @longOver, a0
  45.             sub.w    longs, a0
  46.             jmp        (a0)
  47.             
  48.             move.l    (objectPtr)+, (screenPtr)+
  49.             move.l    (objectPtr)+, (screenPtr)+
  50.             move.l    (objectPtr)+, (screenPtr)+
  51.             move.l    (objectPtr)+, (screenPtr)+
  52.             move.l    (objectPtr)+, (screenPtr)+
  53.             move.l    (objectPtr)+, (screenPtr)+
  54.             move.l    (objectPtr)+, (screenPtr)+
  55.             move.l    (objectPtr)+, (screenPtr)+
  56.             move.l    (objectPtr)+, (screenPtr)+
  57.             move.l    (objectPtr)+, (screenPtr)+
  58.             move.l    (objectPtr)+, (screenPtr)+
  59.             move.l    (objectPtr)+, (screenPtr)+
  60.             move.l    (objectPtr)+, (screenPtr)+
  61.             move.l    (objectPtr)+, (screenPtr)+
  62.             move.l    (objectPtr)+, (screenPtr)+
  63.             move.l    (objectPtr)+, (screenPtr)+
  64.             move.l    (objectPtr)+, (screenPtr)+
  65.             move.l    (objectPtr)+, (screenPtr)+
  66.             move.l    (objectPtr)+, (screenPtr)+
  67.             move.l    (objectPtr)+, (screenPtr)+
  68.             move.l    (objectPtr)+, (screenPtr)+
  69.             move.l    (objectPtr)+, (screenPtr)+
  70.             move.l    (objectPtr)+, (screenPtr)+
  71.             move.l    (objectPtr)+, (screenPtr)+
  72.             move.l    (objectPtr)+, (screenPtr)+
  73.             move.l    (objectPtr)+, (screenPtr)+
  74.             move.l    (objectPtr)+, (screenPtr)+
  75.             move.l    (objectPtr)+, (screenPtr)+
  76.             move.l    (objectPtr)+, (screenPtr)+
  77.             move.l    (objectPtr)+, (screenPtr)+
  78.             move.l    (objectPtr)+, (screenPtr)+
  79.             move.l    (objectPtr)+, (screenPtr)+            
  80.             move.l    (objectPtr)+, (screenPtr)+
  81.             move.l    (objectPtr)+, (screenPtr)+
  82.             move.l    (objectPtr)+, (screenPtr)+
  83.             move.l    (objectPtr)+, (screenPtr)+
  84.             move.l    (objectPtr)+, (screenPtr)+
  85.             move.l    (objectPtr)+, (screenPtr)+
  86.             move.l    (objectPtr)+, (screenPtr)+
  87.             move.l    (objectPtr)+, (screenPtr)+
  88.             move.l    (objectPtr)+, (screenPtr)+
  89.             move.l    (objectPtr)+, (screenPtr)+
  90.             move.l    (objectPtr)+, (screenPtr)+
  91.             move.l    (objectPtr)+, (screenPtr)+
  92.             move.l    (objectPtr)+, (screenPtr)+
  93.             move.l    (objectPtr)+, (screenPtr)+
  94.             move.l    (objectPtr)+, (screenPtr)+
  95.             move.l    (objectPtr)+, (screenPtr)+
  96.             move.l    (objectPtr)+, (screenPtr)+
  97.             move.l    (objectPtr)+, (screenPtr)+
  98.             move.l    (objectPtr)+, (screenPtr)+
  99.             move.l    (objectPtr)+, (screenPtr)+
  100.             move.l    (objectPtr)+, (screenPtr)+
  101.             move.l    (objectPtr)+, (screenPtr)+
  102.             move.l    (objectPtr)+, (screenPtr)+
  103.             move.l    (objectPtr)+, (screenPtr)+
  104.             move.l    (objectPtr)+, (screenPtr)+
  105.             move.l    (objectPtr)+, (screenPtr)+
  106.             move.l    (objectPtr)+, (screenPtr)+
  107.             move.l    (objectPtr)+, (screenPtr)+
  108.             move.l    (objectPtr)+, (screenPtr)+
  109.             move.l    (objectPtr)+, (screenPtr)+
  110.             move.l    (objectPtr)+, (screenPtr)+
  111.             move.l    (objectPtr)+, (screenPtr)+
  112.             move.l    (objectPtr)+, (screenPtr)+
  113.             move.l    (objectPtr)+, (screenPtr)+
  114.             move.l    (objectPtr)+, (screenPtr)+
  115.             move.l    (objectPtr)+, (screenPtr)+
  116.             move.l    (objectPtr)+, (screenPtr)+
  117.             move.l    (objectPtr)+, (screenPtr)+
  118.             move.l    (objectPtr)+, (screenPtr)+
  119.             move.l    (objectPtr)+, (screenPtr)+
  120.             move.l    (objectPtr)+, (screenPtr)+
  121.             move.l    (objectPtr)+, (screenPtr)+
  122.             move.l    (objectPtr)+, (screenPtr)+
  123.             move.l    (objectPtr)+, (screenPtr)+
  124.             move.l    (objectPtr)+, (screenPtr)+
  125.             move.l    (objectPtr)+, (screenPtr)+
  126.             move.l    (objectPtr)+, (screenPtr)+
  127.             move.l    (objectPtr)+, (screenPtr)+
  128.             move.l    (objectPtr)+, (screenPtr)+
  129.             move.l    (objectPtr)+, (screenPtr)+
  130.             move.l    (objectPtr)+, (screenPtr)+
  131.             move.l    (objectPtr)+, (screenPtr)+
  132.             move.l    (objectPtr)+, (screenPtr)+
  133.             move.l    (objectPtr)+, (screenPtr)+
  134.             move.l    (objectPtr)+, (screenPtr)+
  135.             move.l    (objectPtr)+, (screenPtr)+
  136.             move.l    (objectPtr)+, (screenPtr)+
  137.             move.l    (objectPtr)+, (screenPtr)+
  138.             move.l    (objectPtr)+, (screenPtr)+
  139.             move.l    (objectPtr)+, (screenPtr)+
  140.             move.l    (objectPtr)+, (screenPtr)+
  141.             move.l    (objectPtr)+, (screenPtr)+
  142.             move.l    (objectPtr)+, (screenPtr)+
  143.             move.l    (objectPtr)+, (screenPtr)+
  144.             move.l    (objectPtr)+, (screenPtr)+
  145.             move.l    (objectPtr)+, (screenPtr)+
  146.             move.l    (objectPtr)+, (screenPtr)+
  147.             move.l    (objectPtr)+, (screenPtr)+
  148.             move.l    (objectPtr)+, (screenPtr)+
  149.             move.l    (objectPtr)+, (screenPtr)+
  150.             move.l    (objectPtr)+, (screenPtr)+
  151.             move.l    (objectPtr)+, (screenPtr)+
  152.             move.l    (objectPtr)+, (screenPtr)+
  153.             move.l    (objectPtr)+, (screenPtr)+
  154.             move.l    (objectPtr)+, (screenPtr)+
  155.             move.l    (objectPtr)+, (screenPtr)+
  156.             move.l    (objectPtr)+, (screenPtr)+
  157.             move.l    (objectPtr)+, (screenPtr)+
  158.             move.l    (objectPtr)+, (screenPtr)+
  159.             move.l    (objectPtr)+, (screenPtr)+
  160.             move.l    (objectPtr)+, (screenPtr)+
  161.             move.l    (objectPtr)+, (screenPtr)+
  162.             move.l    (objectPtr)+, (screenPtr)+
  163.             move.l    (objectPtr)+, (screenPtr)+
  164.             move.l    (objectPtr)+, (screenPtr)+
  165.             move.l    (objectPtr)+, (screenPtr)+
  166.             move.l    (objectPtr)+, (screenPtr)+
  167.             move.l    (objectPtr)+, (screenPtr)+
  168.             move.l    (objectPtr)+, (screenPtr)+
  169.             move.l    (objectPtr)+, (screenPtr)+
  170.             move.l    (objectPtr)+, (screenPtr)+
  171.             move.l    (objectPtr)+, (screenPtr)+
  172.             move.l    (objectPtr)+, (screenPtr)+
  173.             move.l    (objectPtr)+, (screenPtr)+
  174.             move.l    (objectPtr)+, (screenPtr)+
  175.             move.l    (objectPtr)+, (screenPtr)+
  176.             move.l    (objectPtr)+, (screenPtr)+
  177.             move.l    (objectPtr)+, (screenPtr)+
  178.             move.l    (objectPtr)+, (screenPtr)+
  179.             move.l    (objectPtr)+, (screenPtr)+
  180.             move.l    (objectPtr)+, (screenPtr)+
  181.             move.l    (objectPtr)+, (screenPtr)+
  182.             move.l    (objectPtr)+, (screenPtr)+
  183.             move.l    (objectPtr)+, (screenPtr)+
  184.             move.l    (objectPtr)+, (screenPtr)+
  185.             move.l    (objectPtr)+, (screenPtr)+
  186.             move.l    (objectPtr)+, (screenPtr)+
  187.             move.l    (objectPtr)+, (screenPtr)+
  188.             move.l    (objectPtr)+, (screenPtr)+
  189.             move.l    (objectPtr)+, (screenPtr)+
  190.             move.l    (objectPtr)+, (screenPtr)+
  191.             move.l    (objectPtr)+, (screenPtr)+
  192.             move.l    (objectPtr)+, (screenPtr)+
  193.             move.l    (objectPtr)+, (screenPtr)+
  194.             move.l    (objectPtr)+, (screenPtr)+
  195.             move.l    (objectPtr)+, (screenPtr)+
  196.             move.l    (objectPtr)+, (screenPtr)+
  197.             move.l    (objectPtr)+, (screenPtr)+
  198.             move.l    (objectPtr)+, (screenPtr)+
  199.             move.l    (objectPtr)+, (screenPtr)+
  200.             move.l    (objectPtr)+, (screenPtr)+
  201.             move.l    (objectPtr)+, (screenPtr)+
  202.             move.l    (objectPtr)+, (screenPtr)+
  203.             move.l    (objectPtr)+, (screenPtr)+
  204.             move.l    (objectPtr)+, (screenPtr)+
  205.             move.l    (objectPtr)+, (screenPtr)+
  206.             move.l    (objectPtr)+, (screenPtr)+
  207.             move.l    (objectPtr)+, (screenPtr)+
  208. @longOver:
  209.         }
  210.         
  211.         asm
  212.         {
  213.             lea        @byteOver, a0
  214.             sub.w    bytes, a0
  215.             jmp        (a0)
  216.             
  217.             move.b    (objectPtr)+, (screenPtr)+
  218.             move.b    (objectPtr)+, (screenPtr)+
  219.             move.b    (objectPtr)+, (screenPtr)+
  220. @byteOver:
  221.         }
  222.         
  223.         screenRow += screenRowSize;
  224.         objectRow += objectRowSize;
  225.         screenPtr = screenRow;
  226.         objectPtr = objectRow;
  227.     }
  228.     while( --numRows );
  229. }
  230.  
  231. // don't use this to copy over 640 bytes...    *Stiles
  232.